package untiring07;

public class J02_Operators {

//	 연산자 operator
// 컴퓨터 프로그램은 특정 기능을 수행할 작업들로 구성됨
// 연산자는 이러한 작업을 표현하는 기호
//  작업에는 더하기, 빼기, 곱하기, 나누기, 비트 이동 등이 있음
//	 연산자는 한 /두/세 개의 피 연산자에서 작업을 수행함
//	 피연산자 operand 는 작업의 대상을 의미
	
	
	
	
	
	public static void main(String[] args) {
		// 1.단항 연산자 : ++,--,!
		int val1 = 10;
		int val2 = ++val1;    //val1 = val1+1; (증가)
		int val3 = --val1;      //val1 = val1-1; (감소)
		boolean isMarried = true; 
		//결과 출력
		System.out.println(val2);
		System.out.println(val1);
		System.out.println(!isMarried);    //! = not(반대)
		
		// 2.산술 연산자 : +, -, *, /, %
		int op1 = 300;
		int op2 = 125;
		int op3 = 123;
		int op4 = 23;
		int plus = op1 + op2;
		int sub = op1 - op2;
		int mul = op1 * op2;
		int div = op1 / op2;       
		// 정수를 정수로 나누면 경과도 정수
		//int div2 = op1 / (float)op2;
		// 정수를 정수로 나누면 결과도 정수
		// 수식의 결과 유형과 그것을 저장하는 변수의 유형은 일치해야 함
		float div2 = op1 / (float)op2;
	    float div3 = op3 / (float)op4;     
	    double div4 = op3 / (float)op4;     
	    double div5 = op3 / (double)op4;     
	    // 실수 형 변환에 따라 미세한 오차가 발생할 수도 있음
	    // math 클래스를 이용하면 오차를 줄일 수 있음
		int mod = op1 % op2;
		//결과 출력
		System.out.println(op1);
		System.out.println(op2);
		System.out.println(plus);
		System.out.println(sub);
		System.out.println(mul);
		System.out.println(div);
		System.out.println(div2);
		System.out.println(div3);
		System.out.println(div4);
		System.out.println(div5);
		System.out.println(mod);
		
		
		// 3.관계 / 동등 연산자 : > , < , >= , <= , == , !=
	    boolean rel1 = 100 > 150;
	    boolean rel2 = 100 < 150;
	    boolean rel3 = 100 >= 100;
	    boolean rel4 = 100 <= 100;
	    boolean rel5 = op1 == op2;
	    boolean rel6 = op3 != op4;
		//결과출력
	    System.out.println(rel1);
	    System.out.println(rel2);
	    System.out.println(rel3);
	    System.out.println(rel4);
	    System.out.println(rel5);
	    System.out.println(rel6);
	    
	    //4. 조건 연산자 : AND, OR,  && , || , ? :
	    boolean cond1 = (100 > 150) && (op1 == op2);
	    // short - circuit 연산
	    // 조건 연산 처리시 첫째 항의 연산 결과로 의해
	    // 전체 수식의 결과를 바로 알 수 있는 경우
	    // 나머지 항의 수식은 연산하지 않음
	    boolean cond2 = (op1 == op2) && (100 > 150);
	    boolean cond3 = (100 > 150) || (op1 == op2);
	    char cond4 =  (op1 == op2) ? '정':'오';
	    // 삼항 연산자 ? :
	    // 형식은  (조건식)? 참일떄 처리 : 거짓일때 처리 ;
	    //결과출력
	    System.out.println(cond1);
	    System.out.println(cond2);
	    System.out.println(cond3);
	    System.out.println(cond4);
	    
	    //5. 대입 연산자 : =, +=, -=, *=,/= , %=
	    int assg1 = 100;
	    int assg2 = 125;
	    int assg3 = 150;
	    int assg4 = 175;
	    int assg5 = 200;
	    
	    assg1 += 200;    // assg1 = assg1 + 200;
	    assg2 -= 200; 	// assg2 = assg2 - 200;
	    assg3 *= 200;	// assg3 = assg3 * 200;
	    assg4 /= 75;		// assg4 = assg4 / 75;
	    assg5 %= 75;		// assg5 = assg5 % 75;
	    
	    System.out.println("assg1+=" +assg1);
	    System.out.println(assg2);
	    System.out.println(assg3);
	    System.out.println(assg4);
	    System.out.println(assg5);
	    
	    
	    
		
		
	}

}
